#!/bin/bash
#vi 脚本:
#1.set ff，查看文件格式，
#2.修改文件格式为 unix即可，底行模式下输入 set ff=unix
#执行的程序
# APP_NAME=springboot-quartz-0.0.1-SNAPSHOT.jar

# jar包数组
JARS=(gateway.jar product.jar upload.jar barcodes.jar)

#jar包或者程序所在的路径，可以写死，或者使用pwd命令获取。使用pwd命令要注意一定要加上``这个引号
APP_DIR=$(pwd)

#使用说明，用来提示输入参数
usage() {
  echo "Usage: sh sms.sh [start:启动程序|stop:关闭程序|restart:重启程序|status:查看程序状态]"
  exit 1
}

#启动方法
start() {
  local JAR_NAME=

  for ((i = 0; i < ${#JARS[@]}; i++)); do
    JAR_NAME=${JARS[$i]}

    #检查程序是否在运行
    #获取进程编号，并将进程编号赋值给pid变量
    pid=$(ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}')
    #如果不存在则启动jar包，存在则打印相关信息
    if [ -z "${pid}" ]; then
      #启动程序
      nohup java -jar $APP_DIR/$JAR_NAME >$APP_DIR/log.out 2>&1 &
      echo "$JAR_NAME  启动完成 start success"
      #输出进程编号
      echo "ps number is:pid = ${pid} ,APP_DIR=${APP_DIR}"
    else
      #打印已启动程序的信息
      echo "${JAR_NAME} is already running. pid=${pid} ."
    fi
  done
}

#停止方法，同样先调用is_exist方法看程序是否在运行，运行使用命令杀死进程，没有运行输出序没有在运行。
stop() {
  local JAR_NAME=
  for ((i = 0; i < ${#JARS[@]}; i++)); do
    JAR_NAME=${JARS[$i]}

    #检查程序是否在运行
    #获取进程编号，并将进程编号赋值给pid变量
    pid=$(ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}')
    #如果不存在则启动jar包，存在则打印相关信息
    if [ -z "${pid}" ]; then
      #不存在 输出程序没有在运行
      echo "${JAR_NAME} is not running"
    else
      #存在 使用命令杀掉此程序的进程,pid在is_exist已经获取
      kill -9 $pid
    fi
  done
}

#输出运行状态
status() {

  local JAR_NAME=
  for ((i = 0; i < ${#JARS[@]}; i++)); do
    JAR_NAME=${JARS[$i]}

    #检查程序是否在运行
    #获取进程编号，并将进程编号赋值给pid变量
    pid=$(ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}')
    #如果不存在则启动jar包，存在则打印相关信息
    if [ -z "${pid}" ]; then
      echo "${JAR_NAME} is NOT running."
    else
      echo "${JAR_NAME} is running. Pid is ${pid}"
    fi
  done
}

#重启
restart() {
  stop
  start
}
#输入方法：根据输入参数，选择执行对应方法，不输入则执行使用说明
#根据输入参数，选择执行对应方法，不输入则执行使用说明
case "$1" in
"start")
  start
  ;;
"stop")
  stop
  ;;
"status")
  status
  ;;
"restart")
  restart
  ;;
*)
  usage
  ;;
esac
